
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>同步 异步 阻塞 非阻塞的概念 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>同步 异步 阻塞 非阻塞的概念 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是同步（Synchronous）操作？它的执行方式是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">同步（Synchronous）在计算机科学中是指任务按顺序执行的方式。在这种模式下，当前任务必须等待前一个任务完成后才能开始执行。简单来说，同步意味着一个接一个地执行操作。</div>
          </div>
          <div class="card-source">来源: 同步（Synchronous）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">同步操作在高并发场景下有哪些主要缺点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">同步操作的主要缺点包括：1) 性能瓶颈：在等待前一个任务完成时，会导致线程阻塞，造成性能瓶颈。2) 资源浪费：等待中的线程依然占用系统资源。3) 扩展性差：在处理大规模并发请求时扩展性较差。</div>
          </div>
          <div class="card-source">来源: 同步（Synchronous） -> 优缺点分析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">什么是异步（Asynchronous）操作？它的工作原理是怎样的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">异步（Asynchronous）是指任务可以并发执行，而不需要等待其他任务完成。其工作原理通常通过事件驱动的方式实现：任务被提交到任务队列，主线程继续执行其他任务。当异步操作完成后，任务队列会通知主线程，并调用相应的回调函数或者通过 Future 和 Promise 等机制处理结果。</div>
          </div>
          <div class="card-source">来源: 异步（Asynchronous） -> 工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中提到了哪几种常见的异步编程模型？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档中提到的异步编程模型有三种：1) 回调（Callback）：异步操作完成后，通过回调函数处理结果。2) Future 和 Promise：在任务完成后获取结果，避免回调地狱。3) 反应式编程（Reactive Programming）：通过流和数据流操作符处理异步数据流。</div>
          </div>
          <div class="card-source">来源: 异步（Asynchronous） -> 异步编程模型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是阻塞（Blocking）？当一个线程被阻塞时会发生什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">阻塞（Blocking）是指在执行某个操作时，如果条件不满足，当前线程会暂停执行，等待条件满足后才继续执行。在这种状态下，线程会主动让出CPU的使用权，进入等待状态，直到阻塞条件被解除。</div>
          </div>
          <div class="card-source">来源: 阻塞（Blocking） -> 工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">非阻塞操作相较于阻塞操作有哪些核心优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">非阻塞操作的核心优势包括：1) 高效利用CPU资源，允许线程在等待条件满足的同时继续执行其他任务；2) 提升系统并发性能和响应速度，适用于高并发和I/O密集型应用场景；3) 减少线程间的竞争和上下文切换。</div>
          </div>
          <div class="card-source">来源: 非阻塞（Non-blocking） -> 优缺点分析</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">非阻塞（Non-blocking）操作是如何工作的？当条件不满足时它会如何响应？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在非阻塞操作中，当一个线程尝试执行某个操作但条件不满足时，它不会暂停执行，而是会立即返回一个状态值（如false或null）或抛出一个异常。这使得线程可以继续执行其他任务，而不会进入等待状态。</div>
          </div>
          <div class="card-source">来源: 非阻塞（Non-blocking） -> 工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">Java NIO（Non-blocking I/O）属于哪种编程模型？它是如何工作的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Java NIO属于事件驱动的非阻塞编程模型。它使用一个选择器（Selector）来管理多个非阻塞的通道（Channel），每当有新的连接或数据可读时，选择器会通知主线程处理相应的事件，而不会因为等待某个连接或数据而阻塞。</div>
          </div>
          <div class="card-source">来源: 非阻塞（Non-blocking） -> 实现示例 及 非阻塞编程模型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">同步/异步与阻塞/非阻塞这两组概念的根本区别是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">同步与异步的区别在于是否需要等待当前任务完成才能开始下一个任务。而阻塞与非阻塞的区别在于，当条件不满足时，是暂停任务等待条件满足（阻塞），还是继续执行其他任务（非阻塞）。</div>
          </div>
          <div class="card-source">来源: 区别与联系</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
